﻿using SuperX.Common.Collection;
using SuperX.Common.MSG;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Text;
using IotRenamedEventArgs = SuperX.Common.MSG.IotRenamedEventArgs;

namespace SuperX.Common
{
    // 
    public interface IBasicObject : IJsonSerialize, INotifyPropertyChanged, IDisposable, ICloneable
    {
        // 类型
        string ServiceType { get; set; }

        // 名称
        string Name { get; set; }

        // id
        long Identity { get; set; }

        // 描述
        string Description { get; set; }

        // 父类
        [JsonIgnore]
        IBasicObject Parent { get; set; }

        // 全名
        [JsonIgnore]
        string FullName { get; }

        // 获取属性值
        object GetPropertyValue(string propertyName);

        // 设置属性值
        bool SetPropertyValue(string propertyName, object value);

        // 
        event EventHandler<MsgEventArgs> NotifyMessage;

        // 
        event EventHandler<IotRenamedEventArgs> Renamed;

        // 验证名称是否合法
        bool IsValidName(string name);

        // 集合中名称是否唯一
        bool IsUniqueName(string name, IObjCollection parent);

        // 深克隆
        IBasicObject DeepClone();

        // 浅克隆
        IBasicObject ShallowClone();
    }
}
